package one;

public class A012 {
    public String minWindow(String s, String t) {
        //子串是连续的，在s中找到一个字符串，要求涵盖t中的所有字符，区分相同字符
        //字符串--》数组--》排序--》字符串--》比较是否相同
        int[] hash = new int[52];
        for(char ch:t.toCharArray()) {
            if (Character.isUpperCase(ch)) {
                // System.out.println(ch + " 是大写字母");
                //大写 - 65
                hash[ch-65]++;
            } else if (Character.isLowerCase(ch)) {
                // System.out.println(ch + " 是小写字母");
                //小写-71
                hash[ch-71]++;
            }
        }
        int len = s.length();
        int[] cur = new int[52];
        boolean bool = true;//没有
        String ret = "";
        int min= Integer.MAX_VALUE;
        int count=0;
        //滑动窗口
        for(int left=0,right=0;right<len;right++) {
            bool=true;
            int ch = s.charAt(right);
            if (Character.isUpperCase(ch)) {
                cur[ch-65]++;
            } else if (Character.isLowerCase(ch)) {
                cur[ch-71]++;
            }
            //1.判断是否有
            for(int i=0;i<52;i++) {
                if(hash[i]!=0 &&cur[i]<hash[i]) {
                    //有不等
                    bool=false;
                    break;
                }
                if(i==51) count++;
            }
            while(bool && left<len) {
                if(min > right-left+1) {
                    ret = s.substring(left,right+1);//取结果
                    min =  right-left+1;
                }
                ch = s.charAt(left++);
                if (Character.isUpperCase(ch)) {
                    cur[ch-65]--;
                    if(cur[ch-65]<hash[ch-65] ) {
                        bool=false;
                        //进入说明是去掉了核心字符
                        count--;
                    }else {
                        if(min > right-left+1) {
                            ret = s.substring(left,right+1);//取结果
                            min =  right-left+1;
                        }
                    }
                }else if (Character.isLowerCase(ch)) {
                    cur[ch-71]--;
                    if(cur[ch-71]<hash[ch-71]) {
                        bool=false;
                        count--;

                    }else {
                        if(min > right-left+1) {
                            ret = s.substring(left,right+1);//取结果
                            min =  right-left+1;
                        }

                    }
                }
            }

        }
        return ret;
    }

}
